In [1]:
import os
import json
from cog_analysis import analyze_session
from natsort import natsorted
summary = []
base_dir = "../Data_Sailnjord/Maneuvers"
# Parcours tous les dossiers de date
for date_folder in sorted(os.listdir(base_dir)):
date_path = os.path.join(base_dir, date_folder)
if not os.path.isdir(date_path):
continue
# Parcours tous les dossiers de personne dans chaque date
for person_folder in sorted(os.listdir(date_path)):
person_path = os.path.join(date_path, person_folder)
if not os.path.isdir(person_path):
continue
# Parcours tous les dossiers de run dans chaque dossier de personne
for run_folder in natsorted(os.listdir(person_path)):
run_path = os.path.join(person_path, run_folder)
if not os.path.isdir(run_path):
continue
# Cherche un fichier CSV dans le run
csv_files = [f for f in os.listdir(run_path) if f.endswith(".csv")]
if len(csv_files) != 1:
print(f"Ignoré: {run_path} (attendu 1 CSV, trouvé {len(csv_files)})")
continue
csv_path = os.path.join(run_path, csv_files[0])
print(f"Analyse: {csv_files[0]} dans {run_path}")
try:
intervals = analyze_session(csv_path)
print(f"✔ Analyse réussie, nombre d'intervalles : {len(intervals)}")
summary.append({
"date": date_folder,
"person": person_folder,
"run": run_folder,
"intervals": intervals
})
except Exception as e:
import traceback
print(f"❌ Erreur dans {run_path} : {type(e).__name__} - {e}")
traceback.print_exc()
# Sauvegarde du résumé
summary_file = "summary.json"
with open(summary_file, "w") as f:
json.dump(summary, f, indent=2)
print(f"Résumé complet sauvegardé ({len(summary)} runs)")
Analyse: SenseBoard.csv dans ../Data_Sailnjord/Maneuvers\08_06\Gian\08_06_Run1
✔ Analyse réussie, nombre d'intervalles : 1 Analyse: SenseBoard.csv dans ../Data_Sailnjord/Maneuvers\08_06\Gian\08_06_Run2
✔ Analyse réussie, nombre d'intervalles : 1 Analyse: SenseBoard.csv dans ../Data_Sailnjord/Maneuvers\08_06\Gian\08_06_Run3
✔ Analyse réussie, nombre d'intervalles : 1 Analyse: SenseBoard.csv dans ../Data_Sailnjord/Maneuvers\08_06\Gian\08_06_Run4
✔ Analyse réussie, nombre d'intervalles : 1 Analyse: SenseBoard.csv dans ../Data_Sailnjord/Maneuvers\08_06\Gian\08_06_Run5
✔ Analyse réussie, nombre d'intervalles : 1 Analyse: Karl Maeder.csv dans ../Data_Sailnjord/Maneuvers\08_06\Karl\08_06_Run1
✔ Analyse réussie, nombre d'intervalles : 1 Analyse: Karl Maeder.csv dans ../Data_Sailnjord/Maneuvers\08_06\Karl\08_06_Run2
✔ Analyse réussie, nombre d'intervalles : 1 Analyse: Karl Maeder.csv dans ../Data_Sailnjord/Maneuvers\08_06\Karl\08_06_Run3
✔ Analyse réussie, nombre d'intervalles : 1 Analyse: Karl Maeder.csv dans ../Data_Sailnjord/Maneuvers\08_06\Karl\08_06_Run4
✔ Analyse réussie, nombre d'intervalles : 1 Analyse: Karl Maeder.csv dans ../Data_Sailnjord/Maneuvers\08_06\Karl\08_06_Run5
✔ Analyse réussie, nombre d'intervalles : 1 Analyse: Karl Maeder.csv dans ../Data_Sailnjord/Maneuvers\08_06\Karl\08_06_Run6
✔ Analyse réussie, nombre d'intervalles : 1 Analyse: Gian Stragiotti.csv dans ../Data_Sailnjord/Maneuvers\11_06\Gian\11_06_Run1
✔ Analyse réussie, nombre d'intervalles : 1 Analyse: Gian Stragiotti.csv dans ../Data_Sailnjord/Maneuvers\11_06\Gian\11_06_Run2
✔ Analyse réussie, nombre d'intervalles : 1 Analyse: SenseBoard.csv dans ../Data_Sailnjord/Maneuvers\11_06\Gian\11_06_Run3
✔ Analyse réussie, nombre d'intervalles : 1 Analyse: SenseBoard.csv dans ../Data_Sailnjord/Maneuvers\11_06\Gian\11_06_Run4
✔ Analyse réussie, nombre d'intervalles : 1 Analyse: SenseBoard.csv dans ../Data_Sailnjord/Maneuvers\11_06\Gian\11_06_Run5
✔ Analyse réussie, nombre d'intervalles : 1 Analyse: Karl Maeder.csv dans ../Data_Sailnjord/Maneuvers\11_06\Karl\11_06_Run1
✔ Analyse réussie, nombre d'intervalles : 1 Analyse: Karl Maeder.csv dans ../Data_Sailnjord/Maneuvers\11_06\Karl\11_06_Run2
✔ Analyse réussie, nombre d'intervalles : 1 Analyse: Karl Maeder.csv dans ../Data_Sailnjord/Maneuvers\11_06\Karl\11_06_Run3
✔ Analyse réussie, nombre d'intervalles : 1 Analyse: Karl Maeder.csv dans ../Data_Sailnjord/Maneuvers\11_06\Karl\11_06_Run4
✔ Analyse réussie, nombre d'intervalles : 1 Analyse: Karl Maeder.csv dans ../Data_Sailnjord/Maneuvers\11_06\Karl\11_06_Run5
✔ Analyse réussie, nombre d'intervalles : 1 Analyse: Karl Maeder.csv dans ../Data_Sailnjord/Maneuvers\11_06\Karl\11_06_Run6
✔ Analyse réussie, nombre d'intervalles : 1 Résumé complet sauvegardé (22 runs)
In [2]:
print(json.dumps(summary, indent=2))
[
{
"date": "08_06",
"person": "Gian",
"run": "08_06_Run1",
"intervals": [
{
"start_time": 1749369697.661,
"end_time": 1749369707.661,
"duration": 10.0,
"avg_SOG": 14.707070707070704,
"SOG_variation": 0.9418016305337475,
"stability_score": 0.672637863890963,
"boat_name": "SenseBoard"
}
]
},
{
"date": "08_06",
"person": "Gian",
"run": "08_06_Run2",
"intervals": [
{
"start_time": 1749370455.755,
"end_time": 1749370465.755,
"duration": 10.0,
"avg_SOG": 22.81600000000001,
"SOG_variation": 1.1553756658736283,
"stability_score": 0.6582600162193185,
"boat_name": "SenseBoard"
}
]
},
{
"date": "08_06",
"person": "Gian",
"run": "08_06_Run3",
"intervals": [
{
"start_time": 1749370981.354,
"end_time": 1749370991.354,
"duration": 10.0,
"avg_SOG": 25.611000000000004,
"SOG_variation": 0.9611540832338862,
"stability_score": 0.7778514561575225,
"boat_name": "SenseBoard"
}
]
},
{
"date": "08_06",
"person": "Gian",
"run": "08_06_Run4",
"intervals": [
{
"start_time": 1749371575.247,
"end_time": 1749371585.247,
"duration": 10.0,
"avg_SOG": 24.384615384615383,
"SOG_variation": 0.3892600397962809,
"stability_score": 0.9341413910828347,
"boat_name": "SenseBoard"
}
]
},
{
"date": "08_06",
"person": "Gian",
"run": "08_06_Run5",
"intervals": [
{
"start_time": 1749372243.953,
"end_time": 1749372253.953,
"duration": 10.0,
"avg_SOG": 20.477999999999994,
"SOG_variation": 0.9402965360765595,
"stability_score": 0.6979908660163111,
"boat_name": "SenseBoard"
}
]
},
{
"date": "08_06",
"person": "Karl",
"run": "08_06_Run1",
"intervals": [
{
"start_time": 1749368828.959,
"end_time": 1749368838.959,
"duration": 10.0,
"avg_SOG": 13.36930693069307,
"SOG_variation": 0.9718788581152925,
"stability_score": 0.7407038757237728,
"boat_name": "Karl Maeder"
}
]
},
{
"date": "08_06",
"person": "Karl",
"run": "08_06_Run2",
"intervals": [
{
"start_time": 1749369595.256,
"end_time": 1749369605.256,
"duration": 10.0,
"avg_SOG": 0.0,
"SOG_variation": 0.0,
"stability_score": 1.0,
"boat_name": "Karl Maeder"
}
]
},
{
"date": "08_06",
"person": "Karl",
"run": "08_06_Run3",
"intervals": [
{
"start_time": 1749370272.559,
"end_time": 1749370282.559,
"duration": 10.0,
"avg_SOG": 18.647000000000002,
"SOG_variation": 0.6304487739425436,
"stability_score": 0.8701341032530209,
"boat_name": "Karl Maeder"
}
]
},
{
"date": "08_06",
"person": "Karl",
"run": "08_06_Run4",
"intervals": [
{
"start_time": 1749370856.263,
"end_time": 1749370866.263,
"duration": 10.0,
"avg_SOG": 17.735849056603776,
"SOG_variation": 0.549858142413058,
"stability_score": 0.8668252600852491,
"boat_name": "Karl Maeder"
}
]
},
{
"date": "08_06",
"person": "Karl",
"run": "08_06_Run5",
"intervals": [
{
"start_time": 1749371455.25,
"end_time": 1749371465.25,
"duration": 10.0,
"avg_SOG": 20.49423076923077,
"SOG_variation": 0.2217695867853076,
"stability_score": 0.9425659652059947,
"boat_name": "Karl Maeder"
}
]
},
{
"date": "08_06",
"person": "Karl",
"run": "08_06_Run6",
"intervals": [
{
"start_time": 1749372115.657,
"end_time": 1749372125.657,
"duration": 10.0,
"avg_SOG": 21.417857142857144,
"SOG_variation": 0.5400697405662759,
"stability_score": 0.9042970919566947,
"boat_name": "Karl Maeder"
}
]
},
{
"date": "11_06",
"person": "Gian",
"run": "11_06_Run1",
"intervals": [
{
"start_time": 1749644515.257,
"end_time": 1749644525.257,
"duration": 10.0,
"avg_SOG": 17.85,
"SOG_variation": 0.18311038136792207,
"stability_score": 0.887000829331072,
"boat_name": "Gian Stragiotti"
}
]
},
{
"date": "11_06",
"person": "Gian",
"run": "11_06_Run2",
"intervals": [
{
"start_time": 1749645595.26,
"end_time": 1749645605.26,
"duration": 10.0,
"avg_SOG": 20.033962264150944,
"SOG_variation": 0.207497355151277,
"stability_score": 0.9387863224202455,
"boat_name": "Gian Stragiotti"
}
]
},
{
"date": "11_06",
"person": "Gian",
"run": "11_06_Run3",
"intervals": [
{
"start_time": 1749646331.956,
"end_time": 1749646341.956,
"duration": 10.0,
"avg_SOG": 12.839603960396042,
"SOG_variation": 0.8947713906826472,
"stability_score": 0.7815465815145274,
"boat_name": "SenseBoard"
}
]
},
{
"date": "11_06",
"person": "Gian",
"run": "11_06_Run4",
"intervals": [
{
"start_time": 1749646875.357,
"end_time": 1749646885.357,
"duration": 10.0,
"avg_SOG": 18.58118811881188,
"SOG_variation": 0.9391179767512842,
"stability_score": 0.763371296114111,
"boat_name": "SenseBoard"
}
]
},
{
"date": "11_06",
"person": "Gian",
"run": "11_06_Run5",
"intervals": [
{
"start_time": 1749647455.259,
"end_time": 1749647465.259,
"duration": 10.0,
"avg_SOG": 1.0634615384615385,
"SOG_variation": 0.7145624867786667,
"stability_score": 0.8930570080943446,
"boat_name": "SenseBoard"
}
]
},
{
"date": "11_06",
"person": "Karl",
"run": "11_06_Run1",
"intervals": [
{
"start_time": 1749644635.257,
"end_time": 1749644645.257,
"duration": 10.0,
"avg_SOG": 21.14905660377359,
"SOG_variation": 0.22499798418706715,
"stability_score": 0.9506802405719211,
"boat_name": "Karl Maeder"
}
]
},
{
"date": "11_06",
"person": "Karl",
"run": "11_06_Run2",
"intervals": [
{
"start_time": 1749645371.855,
"end_time": 1749645381.855,
"duration": 10.0,
"avg_SOG": 18.138613861386137,
"SOG_variation": 0.651148262230608,
"stability_score": 0.7700871254910471,
"boat_name": "Karl Maeder"
}
]
},
{
"date": "11_06",
"person": "Karl",
"run": "11_06_Run3",
"intervals": [
{
"start_time": 1749646015.257,
"end_time": 1749646025.257,
"duration": 10.0,
"avg_SOG": 18.836538461538463,
"SOG_variation": 0.3389886030554837,
"stability_score": 0.9259038742176654,
"boat_name": "Karl Maeder"
}
]
},
{
"date": "11_06",
"person": "Karl",
"run": "11_06_Run4",
"intervals": [
{
"start_time": 1749646675.257,
"end_time": 1749646685.257,
"duration": 10.0,
"avg_SOG": 19.15660377358491,
"SOG_variation": 0.2685498334805095,
"stability_score": 0.9250332263651599,
"boat_name": "Karl Maeder"
}
]
},
{
"date": "11_06",
"person": "Karl",
"run": "11_06_Run5",
"intervals": [
{
"start_time": 1749647337.456,
"end_time": 1749647347.456,
"duration": 10.0,
"avg_SOG": 18.104,
"SOG_variation": 0.969736659711898,
"stability_score": 0.868814283003886,
"boat_name": "Karl Maeder"
}
]
},
{
"date": "11_06",
"person": "Karl",
"run": "11_06_Run6",
"intervals": [
{
"start_time": 1749648055.26,
"end_time": 1749648065.26,
"duration": 10.0,
"avg_SOG": 17.620754716981132,
"SOG_variation": 0.20225506608282626,
"stability_score": 0.9091588961385519,
"boat_name": "Karl Maeder"
}
]
}
]
In [ ]: